/*
 *  Copyright 2013 National Institute of Advanced Industrial Science and Technology
 *  
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package org.sss.mapreduce.example;

import org.sss.client.SimpleJob;
import org.sss.client.SssClient;
import org.sss.mapreduce.GroupID;
import org.sss.mapreduce.Mapper;
import org.sss.mapreduce.Reducer;

public class WordCountSimpleJob {
  static Class<? extends Mapper>  mapperClass   = TokenizerMapper.class;
  static Class<? extends Reducer> combinerClass = IntSumReducer.class;
  static Class<? extends Reducer> reducerClass  = IntSumReducer.class;

  public static GroupID run(SssClient client, GroupID input) throws Exception {
    SimpleJob job = new SimpleJob(client);

    job.setMapperClass(mapperClass);
    job.setCombinerClass(combinerClass);
    job.setReducerClass(reducerClass);
    job.setInputGID(input);

    return job.execute();
  }

  /**
   * Usage:
   * java WordCount groupid
   */
  public static void main(String[] args) throws Exception {
    SssClient client = new SssClient(args);

    String[] others = client.getArgs();
    if (others.length < 1) {
      System.err.println("input group id is not specified.");
      System.exit(1);
    }

    GroupID input = GroupID.createFromString(others[0]);

    long start = System.currentTimeMillis();
    GroupID out = run(client, input);
    long end = System.currentTimeMillis();
    long elapsed = end - start;

    System.out.println("output data deployed - " + out.toString());
    System.out.println("elapsed " + Long.toString(elapsed) + " ms.");
  }
}
